import path from 'path'
import {defineConfig,loadEnv } from 'vite'
import Vue from '@vitejs/plugin-vue'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'

// https://vitejs.dev/config/
export default ({ mode }) => {
    const env = loadEnv(mode, process.cwd());
    return defineConfig({
        resolve: {
            alias: {
                "@": path.resolve(__dirname, "./src"),
            }
        },
        plugins: [
            Vue(),
            AutoImport({
                resolvers: [ElementPlusResolver()],
            }),
            Components({
                resolvers: [ElementPlusResolver()],
            }),
        ],
        // 优化配置
        optimizeDeps: {
            // 是否将 Vue、React、@vueuse/core 和 @vueuse/head 作为外部依赖提取出来
            include: ['vue', 'react', '@vueuse/core', '@vueuse/head'],
            // 是否开启预构建，将预构建后的代码提前注入到浏览器缓存中，以减少首次加载的时间
            prebuild: false,
        },
        // 构建配置
        build: {
            // 输出目录，默认是 dist
            outDir: 'dist',
            // 是否开启 sourcemap
            sourcemap: false,
            // 是否开启压缩
            minify: 'esbuild', // 可选值：'terser' | 'esbuild'
            // 是否开启 brotli 压缩
            brotli: true,
            // 是否将模块提取到单独的 chunk 中，默认是 true
            chunkSizeWarningLimit: 500,
            // 是否提取 CSS 到单独的文件中
            cssCodeSplit: true,
            // 是否开启 CSS 压缩
            cssMinify: true,
            // 是否开启 CSS 去重
            cssInlineLimit: 4096,
            // 启用/禁用 esbuild 的 minification，如果设置为 false 则使用 Terser 进行 minification
            target: 'es2018', // 可选值：'esnext' | 'es2020' | 'es2019' | 'es2018' | 'es2017' | 'es2016' | 'es2015' | 'es5'
            // 是否开启 Rollup 的代码拆分功能
            rollupOptions: {
                output: {
                    manualChunks: {},
                },
            },
            // 是否开启增量式构建
            // https://vitejs.dev/guide/build.html#incremental-build
            incremental: false,
        },
        // 根路径，也就是项目的基础路径
        base: './',
        // 服务器配置
        server: {
            port: env.VITE_PORT,
            host: "0.0.0.0",
            open: env.VITE_OPEN == 'true',
            proxy: {
                [env.VITE_BASE_API]: {
                    target: 'http://localhost:9999',
                    ws: true,
                    changeOrigin: true,
                    rewrite: (path) => path.replace(env.VITE_BASE_API, '')
                }
            }
        },
    })
}
